package br.com.colegio.vo;

import java.io.Serializable;
import java.text.ParseException;
import java.util.Date;

import javax.jdo.annotations.Persistent;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import br.com.colegio.dao.storage.AlunoData;
import br.com.colegio.dao.storage.BoletoStatusData;
import br.com.colegio.dao.storage.CanalPagamentoData;
import br.com.colegio.dao.storage.CodigoRetornoData;
import br.com.colegio.util.NumberParser;
import br.com.colegio.util.UtilData;

import com.google.appengine.api.datastore.Key;

@Entity
public class Boleto implements Serializable
{
	private static final long serialVersionUID = -8532602074040513988L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Key key;

	@Persistent
	private String codigo;

	@Persistent
	private String grupo;

	@Persistent
	private Date dataVencimento;

	@Persistent
	private Date dataEmissao;

	@Persistent
	private double valorTotal;

	@Persistent
	private double desconto;

	@Persistent
	private double multa;

	@Persistent
	private Date dataMulta;

	@Persistent
	private double jurosDia;

	@Persistent
	private String descricao;

	@Persistent
	private String descricaoCompleta;

	@Persistent
	private Date dataPagamento;

	@Persistent
	private double pagamentoValor;

	@Persistent
	private double pagamentoDesconto;

	@Persistent
	private double pagamentoMulta;

	@Persistent
	private double pagamentoTarifa;

	@Persistent
	private Date creditoData;

	@Persistent
	private String alunoBoleto;

	@Persistent
	private Integer codigoRetornoBoleto;

	@Persistent
	private Integer pagamentoCanalBoleto;

	@Persistent
	private String statusBoleto;

	@Persistent
	private String pagamentoTipo;

	public long getId() {
		return key.getId();
	}

	public void setId(long id) {
	}

	public Key getKey() {
		return key;
	}

	public void setKey(Key key) {
		this.key = key;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getGrupo() {
		return grupo;
	}

	public void setGrupo(String grupo) {
		this.grupo = grupo;
	}

	public Date getDataVencimento() {
		return dataVencimento;
	}

	public void setDataVencimento(Date dataVencimento) {
		this.dataVencimento = dataVencimento;
	}

	public Date getDataEmissao() {
		return dataEmissao;
	}

	public void setDataEmissao(Date dataEmissao) {
		this.dataEmissao = dataEmissao;
	}

	public double getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(double valorTotal) {
		this.valorTotal = valorTotal;
	}

	public double getDesconto() {
		return desconto;
	}

	public void setDesconto(double desconto) {
		this.desconto = desconto;
	}

	public double getMulta() {
		return multa;
	}

	public void setMulta(double multa) {
		this.multa = multa;
	}

	public Date getDataMulta() {
		return dataMulta;
	}

	public void setDataMulta(Date dataMulta) {
		this.dataMulta = dataMulta;
	}

	public double getJurosDia() {
		return jurosDia;
	}

	public void setJurosDia(double jurosDia) {
		this.jurosDia = jurosDia;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getDescricaoCompleta() {
		return descricaoCompleta;
	}

	public void setDescricaoCompleta(String descricaoCompleta) {
		this.descricaoCompleta = descricaoCompleta;
	}

	public Date getDataPagamento() {
		return dataPagamento;
	}

	public void setDataPagamento(Date dataPagamento) {
		this.dataPagamento = dataPagamento;
	}

	public double getPagamentoValor() {
		return pagamentoValor;
	}

	public void setPagamentoValor(double pagamentoValor) {
		this.pagamentoValor = pagamentoValor;
	}

	public double getPagamentoDesconto() {
		return pagamentoDesconto;
	}

	public void setPagamentoDesconto(double pagamentoDesconto) {
		this.pagamentoDesconto = pagamentoDesconto;
	}

	public double getPagamentoMulta() {
		return pagamentoMulta;
	}

	public void setPagamentoMulta(double pagamentoMulta) {
		this.pagamentoMulta = pagamentoMulta;
	}

	public double getPagamentoTarifa() {
		return pagamentoTarifa;
	}

	public void setPagamentoTarifa(double pagamentoTarifa) {
		this.pagamentoTarifa = pagamentoTarifa;
	}

	public Date getCreditoData() {
		return creditoData;
	}

	public void setCreditoData(Date creditoData) {
		this.creditoData = creditoData;
	}

	public Aluno getAlunoBoleto() {
		return AlunoData.getInstance().getAluno(alunoBoleto);
	}

	public void setAlunoBoleto(String alunoBoleto) {
		this.alunoBoleto = alunoBoleto;
	}

	public CodigoRetorno getCodigoRetornoBoleto() {
		return CodigoRetornoData.getInstance().getCodigoRetorno(codigoRetornoBoleto);
	}

	public void setCodigoRetornoBoleto(Integer codigoRetornoBoleto) {
		this.codigoRetornoBoleto = codigoRetornoBoleto;
	}

	public CanalPagamento getPagamentoCanalBoleto() {
		return CanalPagamentoData.getInstance().getCanalPagamento(pagamentoCanalBoleto);
	}

	public void setPagamentoCanalBoleto(Integer pagamentoCanalBoleto) {
		this.pagamentoCanalBoleto = pagamentoCanalBoleto;
	}

	public BoletoStatus getStatusBoleto() {
		return BoletoStatusData.getInstance().getBoletoStatus(statusBoleto);
	}

	public void setStatusBoleto(String statusBoleto) {
		this.statusBoleto = statusBoleto;
	}

	public void setPagamentoTipo(String pagamentoTipo) {
		this.pagamentoTipo = pagamentoTipo;
	}

	public String getPagamentoTipo() {
		return pagamentoTipo;
	}

	public String getValorTotalStr() {
		try {
			return NumberParser.format(valorTotal);
		} catch (ParseException e){}
		return String.valueOf(valorTotal);
	}

	public String getDescontoStr() {
		try {
			return NumberParser.format(desconto);
		} catch (ParseException e){}
		return String.valueOf(desconto);
	}

	public String getMultaStr() {
		try {
			return NumberParser.format(multa);
		} catch (ParseException e){}
		return String.valueOf(multa);
	}

	public String getJurosDiaStr() {
		try {
			return NumberParser.format(jurosDia);
		} catch (ParseException e){}
		return String.valueOf(jurosDia);
	}

	public String getPagamentoValorStr() {
		try {
			return NumberParser.format(pagamentoValor);
		} catch (ParseException e){}
		return String.valueOf(pagamentoValor);
	}

	public String getPagamentoDescontoStr() {
		try {
			return NumberParser.format(pagamentoDesconto);
		} catch (ParseException e){}
		return String.valueOf(pagamentoDesconto);
	}

	public String getPagamentoMultaStr() {
		try {
			return NumberParser.format(pagamentoMulta);
		} catch (ParseException e){}
		return String.valueOf(pagamentoMulta);
	}

	public String getPagamentoTarifaStr() {
		try {
			return NumberParser.format(pagamentoTarifa);
		} catch (ParseException e){}
		return String.valueOf(pagamentoTarifa);
	}

	public String getDataVencimentoFmt() {
		return UtilData.format(dataVencimento, "dd/MM/yyyy");	
	}

	public String getDataPagamentoFmt() {
		return UtilData.format(dataPagamento, "dd/MM/yyyy");	
	}

	public String getDataMultaFmt() {
		return UtilData.format(dataMulta, "dd/MM/yyyy");	
	}

	public String getDataEmissaoFmt() {
		return UtilData.format(dataEmissao, "dd/MM/yyyy");	
	}

	public String getCreditoDataFmt() {
		return UtilData.format(creditoData, "dd/MM/yyyy");	
	}
}
